<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        // 面向对象的特征
        //    封装 ， 继承 ，多态

        //    多态
        //      d.say()   c.say()


        //    继承
        //       为了减少代码的重复性

        //       Person 父类
        //       Student 子类



        // 构造函数的继承  ---- 直接调用父类的构造函数，改变this指向

        //   缺点：无法继承父类原型对象上的方法


        function Person(name, sex, age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        Person.prototype.say = function () {
            console.log('我是人');
        }



        function Student(name, sex, age, score) {
            // 直接调用构造函数，this是指向window
            // Person.call(this, name, sex, age);
            Person.apply(this, [name, sex, age]);
            this.score = score;
        }

        Student.prototype.speak = function () {
            console.log('我是学生')
        }


        const s = new Student('cc', '女', 17, 100);
        console.log(s)




    </script>

</body>

</html>